import {Box} from "@mui/material";
import DGDialogLayout from "../../../components/DGDialogLayout/DGDialogLayout.tsx";
import DGDrawerLayout from "../../../components/DGDrawerLayout/DGDrawerLayout.tsx";
import {useNavigate} from "react-router-dom";
import {FC, useState} from "react";
import DGConnect from "../../../sources/DGConnect.ts";
import {Util} from "../../../sources/Util.ts";
import DGTextView from "../../../components/DGTextView.tsx";

interface DGRegResultProps {
    state: boolean,
    switchView: (text: string) => void,
}

const DGRegResult: FC<DGRegResultProps> = ({state, switchView}) => {
    // 路由跳转
    const router = useNavigate();
    // 会话信息
    const get = (key: string) => Util.Storage.getSession(key);
    // 注册状态 0 未知 1 成功 2 失败
    const [RES, setRES] = useState({S: 0, T: ""});
    // 加载状态
    const [loading, setLoading] = useState(false);

    // 重启会话
    const handleReturn = (name: string) => {
        switchView(name);
        setRES({S: 0, T: ""});
    }

    // 关闭函数
    const handleClose = () => {
        // 关闭面板
        switchView("");
        // 后退
        router(-1);
    }

    // 提交函数
    const handleSubmit = () => {
        // 开始加载
        setLoading(true);
        // 发起注册请求
        DGConnect.POST(JSON.stringify({type: "register", submit: 1}), result => {
            // 关闭加载
            setLoading(false);
            // 注册错误信息
            if (result["data"]["code"] !== 200) return setRES({S: 2, T: result["data"]["message"]});
            // 注册成功
            setRES({S: 1, T: "注册成功！"});
            // 删除信息
            Util.Storage.delSession("REGISTER-EMAIL");
            Util.Storage.delSession("REGISTER-CODE");
            Util.Storage.delSession("REGISTER-ACCOUNT");
            Util.Storage.delSession("REGISTER-PASSWORD");
            Util.Storage.delSession("REGISTER-NAME");
        }, error => {
            // 关闭加载
            setLoading(false);
            // 错误信息
            setRES({S: 2, T: String(error["stack"])});
            // 删除信息
            Util.Storage.delSession("REGISTER-EMAIL");
            Util.Storage.delSession("REGISTER-CODE");
            Util.Storage.delSession("REGISTER-ACCOUNT");
            Util.Storage.delSession("REGISTER-PASSWORD");
            Util.Storage.delSession("REGISTER-NAME");
        });
    }


    // DOM 节点
    const ContentView = (<>

        {/* 确认注册信息 */}
        {RES.S === 0 && <>
            <DGTextView Body Bold>现在将需要您进行确认您的信息无误，确认无误后请点击注册按钮进行注册。</DGTextView>
            <DGTextView Body Bold>
                1、绑定邮箱：{get("REGISTER-EMAIL") ? String(get("REGISTER-EMAIL")) : "未设置"}
            </DGTextView>
            <DGTextView Body Bold>
                2、获取验证码：{get("REGISTER-CODE") ? String(get("REGISTER-CODE")) : "未核对"}
            </DGTextView>
            <DGTextView Body Bold>
                3、设置账户：{get("REGISTER-ACCOUNT") ? String(get("REGISTER-ACCOUNT")) : "未设置"}
            </DGTextView>
            <DGTextView Body Bold>
                4、设置密码：{get("REGISTER-PASSWORD") ? String(get("REGISTER-PASSWORD")) : "未设置"}
            </DGTextView>
            <DGTextView Body Bold>
                5、设置昵称：{get("REGISTER-NAME") ? String(get("REGISTER-NAME")) : "未设置"}
            </DGTextView>
        </>}


        {/* 注册成功信息 */}
        {RES.S === 1 && <DGTextView>
            您现在可以使用注册的邮箱或账号进行登录了。
            请点击登陆按钮前往登陆或者点击退出按钮进行退出，退出后账号可正常登陆。
            非常感谢您的支持与信任！
        </DGTextView>}


        {/* 注册失败信息 */}
        {RES.S === 2 && <>
            <DGTextView Body Bold>
                很遗憾，账号注册失败，您可以点击确认按钮重新注册！错误原因：{String(RES.T)}
            </DGTextView>
            <DGTextView Body Bold>
                请检查以下可能存在的问题，如果问题仍然存在，请联系我们的客服团队以获得进一步帮助。感谢您的理解与支持。
            </DGTextView>
            <DGTextView Body Bold>1、邮箱验证：</DGTextView>
            <DGTextView>确保您输入的邮箱地址是正确的，并已收到验证码并完成验证。</DGTextView>
            <DGTextView Body Bold>2、密码要求：</DGTextView>
            <DGTextView>密码应为6至18位的任意字符，请确保输入的密码符合此要求。</DGTextView>
            <DGTextView Body Bold>3、账号问题：</DGTextView>
            <DGTextView>您选择的账号名可能已被注册，请尝试使用其他账号。</DGTextView>
            <DGTextView Body Bold>4、网络问题：</DGTextView>
            <DGTextView>您的网络连接可能存在问题，请检查您的网络设置并重试。</DGTextView>
        </>}
    </>);


    return (<Box>

        {/* DGDialogLayout 样式 */}
        <DGDialogLayout
            submit={{
                name: RES.S !== 0 ? RES.S === 1 ? "登录" : "确定" : "注册",
                click: () => {
                    if (RES.S === 0) handleSubmit();
                    if (RES.S === 1) switchView("login_index");
                    if (RES.S === 2) switchView("reg_index");
                }
            }}
            title={RES.S !== 0 ? RES.S === 1 ? "注册成功" : "注册失败" : "确认信息"}
            load={loading} state={state} close={() => handleClose()} PANEL>
            {ContentView}
        </DGDialogLayout>
        {/* DGDrawerLayout 样式 */}
        <DGDrawerLayout
            submit={{
                name: RES.S !== 0 ? RES.S === 1 ? "登录" : "确定" : "注册",
                click: () => {
                    if (RES.S === 0) handleSubmit();
                    if (RES.S === 1) handleReturn("login_index");
                    if (RES.S === 2) handleReturn("reg_index");
                }
            }}
            title={RES.S !== 0 ? RES.S === 1 ? "注册成功" : "注册失败" : "确认信息"}
            load={loading} state={state} close={() => handleClose()} flex="bottom" PANEL>
            {ContentView}
        </DGDrawerLayout>
    </Box>);
}
export default DGRegResult